﻿/*!
 * 定义模块 Calc (计算工作日) 中所有功能的服务 API。
 * 
 * Copyright (c), 上海沃恩信息科技有限公司.
 * All rights reserved.
 * Licensed under BSD (https://www.pittypat.work/bsd.html).
 */

/*
 * @param {Object} $    jQuery 命名空间。
 * @param {Object} $$   pittypat 命名空间。
 * @param {Object} _mod 模块 Calc (计算工作日) 的命名空间。
 * 
 * 更多说明请参见：
 * https://www.pittypat.work/com/waln/pittypat/coding/help/_api.js.html。
 */
(function ($, $$, _mod) {
    'use strict';

    // 模块的 API 和 UI 命名空间
    var _api = _mod.api = _mod.api || {};

	/*
	 * 功能 Diff (计算工作日) 的服务 API。
	 * 
	 * 输入(args):
	 * {
	 *     // 起始日期
	 *     // 计算的起始日期，包含此日期。
	 *     from: {date?},
	 * 
	 *     // 截至日期
	 *     // 计算的截至日期，包含该日期。可以早于、等于或晚于起始日期。
	 *     to: {date?} 
	 * }
	 * 
	 * 输出(success.result):
	 * // 工作日数目
	 * // 从起始日期（含）到截至日期（含）之间的工作日数目。如果截至日期与起始日期相同，当起始日期是工作日时，返回 1，否则返回 0。如果截至日期早于起始日期，计算结果将小于或等于 0。如果截至日期晚于起始日期，计算结果将大于或等于 0。
	 * days: {int32?}
	 */
    _api.diff = $$.api({
        // 请求路径
        url: '~/waln/calendar/calc/diff',

        // 请求方法：WS|WEBSOCKET、UPLOAD、UPOST|UPLOAD-POST、UWS|UPLOAD-WS、POST 之一
        method: 'POST',

        // 对 args 进行验证
        validate: function (e) {
            if (!e.args) {
                e.message = '没有提供任何参数。';
                return;
            }

            // 验证 from (起始日期)
            if (!$$.util.is.datetime(e.args.from, '2000/01/01', '3000/01/01')) {
                e.message = '没有提供有效的起始日期1。';
                return;
            }

            // 验证 to (截至日期)
            if (!$$.util.is.datetime(e.args.to, '2000/01/01', '3000/01/01')) {
                e.message = '没有提供有效的截至日期1。';
                return;
            }

            // 空字符串表示通过验证
            e.message = '';
        },

        // 发送给服务器的数据
        data: function (e) {
            e.data = e.args;
        }
    });

	/*
	 * 功能 Add (添加工作日) 的服务 API。
	 * 
	 * 输入(args):
	 * {
	 *     // 起始日期
	 *     // 要在其上添加工作日的起始日期。
	 *     from: {date?},
	 * 
	 *     // 工作日数目
	 *     // 要添加的工作日数目，可以大于 0、小于 0 或等于 0，分别返回晚于起始日期、早于起始日期或等于起始日期的值。
	 *     days: {int32?} 
	 * }
	 * 
	 * 输出(success.result):
	 * // 新日期
	 * // 计算后的新日期。如果工作日数目为 0，那么将返回起始日期。如果工作日数目小于 0，那么返回早于起始日期的值。如果工作日数目大于 0，那么返回晚于起始日期的值。
	 * to: {date?}
	 */
    _api.add = $$.api({
        // 请求路径
        url: '~/waln/calendar/calc/add',

        // 请求方法：WS|WEBSOCKET、UPLOAD、UPOST|UPLOAD-POST、UWS|UPLOAD-WS、POST 之一
        method: 'POST',

        // 对 args 进行验证
        validate: function (e) {
            if (!e.args) {
                e.message = '没有提供任何参数。';
                return;
            }

            // 验证 from (起始日期)
            if (!$$.util.is.datetime(e.args.from, '2000/01/01', '3000/01/01')) {
                e.message = '没有提供有效的起始日期。';
                return;
            }

            // 验证 days (工作日数目)
            if (!$$.util.is.int(e.args.days, -999, 999)) {
                e.message = '工作日数目必须是介于 -999 到 999 之间的数字。';
                return;
            }

            // 空字符串表示通过验证
            e.message = '';
        },

        // 发送给服务器的数据
        data: function (e) {
            e.data = e.args;
        }
    });
})(jQuery, pittypat, pittypat.namespace('waln.calendar.calc'));
